package com.tm.car.enums;


import com.tm.car.code.ResultMapCode;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;


import java.io.Serial;
import java.io.Serializable;

/**
 * 响应状态码枚举类。
 * 该类定义了系统中常用的响应状态码及其对应的消息，用于统一管理返回结果的状态码和提示信息。
 * 主要功能包括：
 * 1. 提供标准化的状态码和消息，便于前端和后端统一处理。
 * 2. 支持常见的业务场景，如成功、失败、无效 Token、未绑定微信账号等。
 * <p>
 * 主要枚举值说明：
 * - `SUCC`：操作成功，状态码为 0。
 * - `INVALID_TOKEN`：无效的 Token，状态码为 301。
 * - `UNBOUND_WECHAT`：微信用户未绑定平台账号，状态码为 302。
 * - `FAIL`：操作失败，状态码为 303。
 * - `INVALID_APPID_OR_SECRET`：无效的 AppID 或 Secret，状态码为 304。
 * <p>
 * 主要字段说明：
 * - `code`：状态码，用于标识具体的业务状态。
 * - `message`：状态消息，用于描述状态码对应的提示信息。
 * <p>
 * 使用场景：
 * 1. 适用于需要统一管理响应状态码和消息的场景。
 * 2. 支持在返回结果中传递状态码和消息，便于前端处理。
 *
 * @author tnk
 */
@Data
public class ResultMap<T> implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    @Schema(name = "msg", description = "消息提示")
    private String msg;
    @Schema(name = "data", description = "数据")
    private T data;
    @Schema(name = "code", description = "状态码")
    private int code;
    @Schema(name = "count", description = "data元素数量")
    private long count;


    public ResultMap<T> ok() {
        return this;
    }

    public ResultMap<T> succ(String msg) {
        this.msg = msg;
        return this;
    }

    public ResultMap<T> ok(T data) {
        this.setData(data);
        return this;
    }

    public ResultMap<T> ok(T data, long count) {
        this.setData(data);
        this.setCount(count);
        return this;
    }

    public ResultMap<T> error() {
        this.code = ResultMapCode.FAIL.code;
        this.msg = "网络出错，请联系系统管理员";
        return this;
    }

    public ResultMap<T> error(String msg) {
        this.code = ResultMapCode.FAIL.code;
        this.msg = msg;
        return this;
    }

    public ResultMap<T> error(int code, String msg) {
        this.code = code;
        this.msg = msg;
        return this;
    }
}